import axios, { type InternalAxiosRequestConfig, type AxiosError, type AxiosRequestConfig } from 'axios'

//网络请求的公共配置
const instance = axios.create({
  //基本的URL地址
  baseURL: 'http://localhost:8989',
  //超出时间
  timeout: 3000
});


//拦截器：发送网络请求之前
instance.interceptors.request.use(
  //成功的函数
  (config: InternalAxiosRequestConfig) => {
    //对请求的配置
    config.headers.set('Content-type', 'application/json');
    if (config.method == 'post') {
      config.data = JSON.stringify(config.data);
    }
    // return {
    //   ...config,
    //   headers: {
    //     'x-access-token': '', //请求头中携带token信息
    //   }
    // }
    config.headers.set('x-access-token', ''); //直接修改headers对象
    return config; //返回修改后的config对象
  },
  //失败的函数
  (error: AxiosError) => {
    //请求报错
    return Promise.reject(error)
  }
)


//拦截器：获取数据之前
instance.interceptors.response.use(
  //成功的函数
  (response) => {
    //响应成功时
    return response.status == 200 ? Promise.resolve(response) : Promise.reject(response)
  },
  //失败的函数
  (error: AxiosError) => {
    //同意处理错误信息
    if (error.response?.status == 401) {
      //如果是401错误，可能是未授权，跳转到登录页面
      window.location.href = '/login';
    } else if (error.response?.status == 500) {
      //如果是500错误，可能是服务器错误
      console.error('服务器错误');
    }
    return Promise.reject(error)
  }
)
